//链表逆置
#include<stdio.h>
#include<stdlib.h>

/*a.当两个链表其中一个为空链表时，则返回另一个链表

b.设置一个头结点和尾节点，当两个链表都不为空时，哪个链表的值大（小）则作为尾节点的下一个，并将尾结点向后走；

c.当其中一条走完时，则把另一条作为尾节点的下一个*/
//创造链表节点
typedef struct listnode
{
    int data;
    struct listnode* next;
}list;

//创造链表
list* creatlist(int n)
{
    list* head=NULL;
    for(int i=n;i>=1;n--)
    {
        list* newnode=(list*)malloc(sizeof(list));
        newnode->data=i;
        newnode->next=head;
        head=newnode;

    }
    return head;
}
//打印链表
list* print(list* p)
{
    while(p!=NULL)
    {
        printf("%d",p->data);
        p=p->next;
    }
    printf("\n");
    return p;
}

//逆置链表
list* reverse(list* head)
{
    list* temp=NULL,* pphead=NULL;
    while(head!=NULL)
    {
    temp=head;
    head=head->next;
    temp->next=pphead;
    pphead=temp;
    }
    return pphead;
}


int main()
{

    int n=5;

    list* a=creatlist(n);
    print(a);
    list* head=reverse(a);
    print(head);
    return 0;
}

// int main()
// {
//     printf("1");
//     return 0;
// }